package utn.frc.tsb.utils.ValerioFritelli.SortMethods;

/**
 *  Representa un arreglo y codifica diversos métodos de ordenamiento
 *  @author Ing. Valerio Frittelli
 *  @version Septiembre 2008
 */

public abstract class Ordenamiento
{
    public static void quickSort(QuickSortComparable[] pArray)
    {
        quickSortOrdenar(pArray, 0, pArray.length - 1);
    }

    private static void quickSortOrdenar(QuickSortComparable[] pArray, int izq, int der)
    {
        int i, j;
        i = izq;
        j = der;
        QuickSortComparable x;
        QuickSortComparable y;
        x = pArray[(izq + der) / 2];

        do
        {
            while (pArray[i].quickSortCompare (x) < 0 && i < der)
            {
                i++;
            }
            while (x.quickSortCompare (pArray[j]) < 0 && j > izq)
            {
                j--;
            }
            if (i <= j)
            {
                y = pArray[i];
                pArray[i] = pArray[j];
                pArray[j] = y;
                i++;
                j--;
            }
        }
        while (i <= j);
        if (izq < j)
        {
            quickSortOrdenar(pArray, izq, j);
        }
        if (i < der)
        {
            quickSortOrdenar(pArray, i, der);
        }
    }
}
